const Koa = require('koa')
// 解析请求体
const koaBody = require('koa-body')
// 处理静态资源
const koaStatic = require('koa-static')
// 进行错误处理
const error = require('koa-json-error')

const path = require('path')
// 校验参数
const parameter = require('koa-parameter')
// 导入连接数据库m模块
const MongoConnect = require('./db')
// 连接数据库
MongoConnect()

const app = new Koa()
// 生成url链接
app.use(koaStatic(path.join(__dirname, 'public')))

// 使用koa-json-error处理错误 必须配置在路由的上面
app.use(error({
  postFormat: (e, {stack, ...rest}) => {
    return process.env.NODE_ENV === 'production' ? rest : { stack, ...rest }
  }
}))

// 必须在路由模块前 洋葱模型
app.use(koaBody({
  // 接受文件格式
  multipart: true,
  formidable: {
    // 接受文件目录
    uploadDir: path.join(__dirname, '/public/uploads/'),
    // 保留扩展名
    keepExtensions: true
  }
}))
// 导入路由模块
const routing = require('./routes')
app.use(parameter(app))
routing(app);
app.listen(2000, () => {
  console.log('程序启动在2000端口了');
})